package com.ddpt.platform.common.export;

import com.ddpt.platform.common.enums.MarketingApp;
import com.ddpt.platform.common.export.dto.ExportRequestDto;
import com.ddpt.platform.common.export.dto.activity.ActInfoDto;
import com.ddpt.platform.common.export.dto.activity.QuestionDto;
import com.ddpt.platform.common.export.dto.activity.TemplateDto;
import com.ddpt.platform.common.export.dto.extensions.CurrencyInfoDto;
import com.ddpt.platform.common.export.dto.extensions.UserCurrencyNumDto;
import com.ddpt.platform.common.export.dto.flow.CanvasDto;
import com.ddpt.platform.common.export.dto.flow.ModelDto;
import com.ddpt.platform.common.export.dto.mall.GoodsDto;
import com.ddpt.platform.common.export.dto.merchant.CouponInfoExportDto;
import com.ddpt.platform.common.export.dto.merchant.CouponUserDetailExportDto;
import com.ddpt.platform.common.export.dto.merchant.CustomTemplateDto;
import com.ddpt.platform.common.export.dto.merchant.PagerDto;
import com.ddpt.platform.common.export.dto.merchant.applyInfo.ApplyInfoDto;
import com.ddpt.platform.common.export.dto.merchant.ins.InsDto;
import com.ddpt.platform.common.export.dto.merchant.member.*;
import com.ddpt.platform.common.export.dto.merchant.notice.NoticeDto;
import com.ddpt.platform.common.export.dto.merchant.operation.OperationLogDto;
import com.ddpt.platform.common.export.dto.merchant.store.MerchantCategoryDto;
import com.ddpt.platform.common.export.dto.merchant.task.TaskDto;
import com.ddpt.platform.common.export.dto.merchant.task.TaskUserDto;
import com.ddpt.platform.common.export.dto.order.AfterSalesOrderDto;
import com.ddpt.platform.common.export.dto.order.OrderInfoDto;
import com.ddpt.platform.common.export.dto.permission.AdminUserDto;
import com.ddpt.platform.common.export.dto.permission.RoleDto;
import com.ddpt.platform.common.export.dto.reach.ExternalMerchantConfigDto;
import com.ddpt.platform.common.export.dto.reach.SystemMerchantIpLimitDto;
import com.ddpt.platform.common.export.dto.tingtang.TingtangBusinessEntryExportRequestDto;
import com.ddpt.platform.common.export.dto.user.TagDto;
import com.ddpt.platform.common.export.dto.user.UserDto;
import com.ddpt.platform.common.export.dto.user.UserGroupDto;
import com.ddpt.platform.common.export.vo.QueryDataVo;
import com.ddpt.platform.common.export.vo.activity.ActInfoVo;
import com.ddpt.platform.common.export.vo.activity.QuestionVo;
import com.ddpt.platform.common.export.vo.activity.TemplateVo;
import com.ddpt.platform.common.export.vo.extensions.CurrencyInfoVo;
import com.ddpt.platform.common.export.vo.extensions.UserCurrencyNumVo;
import com.ddpt.platform.common.export.vo.flow.CanvasVo;
import com.ddpt.platform.common.export.vo.flow.ModelVo;
import com.ddpt.platform.common.export.vo.ins.InsVo;
import com.ddpt.platform.common.export.vo.mall.GoodsVo;
import com.ddpt.platform.common.export.vo.mall.MallAppVo;
import com.ddpt.platform.common.export.vo.merchant.CouponInfoExportVo;
import com.ddpt.platform.common.export.vo.merchant.CouponUserDetailExportVo;
import com.ddpt.platform.common.export.vo.merchant.CustomTemplateVo;
import com.ddpt.platform.common.export.vo.merchant.PagerVo;
import com.ddpt.platform.common.export.vo.merchant.applyInfo.ApplyInfoVo;
import com.ddpt.platform.common.export.vo.merchant.member.*;
import com.ddpt.platform.common.export.vo.merchant.notice.NoticeVo;
import com.ddpt.platform.common.export.vo.merchant.operation.OperationLogVo;
import com.ddpt.platform.common.export.vo.merchant.store.MerchantCategoryVo;
import com.ddpt.platform.common.export.vo.merchant.task.TaskUserVo;
import com.ddpt.platform.common.export.vo.merchant.task.TaskVo;
import com.ddpt.platform.common.export.vo.order.AfterSalesOrderInfoVo;
import com.ddpt.platform.common.export.vo.order.OrderInfoVo;
import com.ddpt.platform.common.export.vo.permission.AdminUserVo;
import com.ddpt.platform.common.export.vo.permission.RoleVo;
import com.ddpt.platform.common.export.vo.reach.ExternalMerchantConfigVo;
import com.ddpt.platform.common.export.vo.reach.SystemMerchantIpLimitVo;
import com.ddpt.platform.common.export.vo.tingtang.TingtangBusinessEntryQueryDataVo;
import com.ddpt.platform.common.export.vo.user.TagVo;
import com.ddpt.platform.common.export.vo.user.UserGroupVo;
import com.ddpt.platform.common.export.vo.user.UserVo;


/**
 * 应用类型枚举 - 导出
 *
 * @author : zhanggsc
 * @Data : 2023/2/24 14:44
 */
public enum ExportAppEnum {

    tingtangPromotionDataExport(TingtangBusinessEntryExportRequestDto.class, TingtangBusinessEntryQueryDataVo.class, MarketingApp.tingtang, "厅堂任务录入数据导出"),
    activityInfoExport(ActInfoDto.class, ActInfoVo.class, MarketingApp.activity, "活动详情导出"),
    activityTemplateExport(TemplateDto.class, TemplateVo.class, MarketingApp.activity, "活动模板导出"),
    activityQuestionExport(QuestionDto.class, QuestionVo.class, MarketingApp.activity, "活动题库导出"),
    merchantPageExport(PagerDto.class, PagerVo.class, MarketingApp.merchant, "商户落地页导出"),
    customTemplateExport(CustomTemplateDto.class, CustomTemplateVo.class, MarketingApp.merchant, "商户自建活动模板导出"),
    userInfoExport(UserDto.class, UserVo.class, MarketingApp.user, "客户信息导出"),
    userGroupInfoExport(UserGroupDto.class, UserGroupVo.class, MarketingApp.user, "客群信息导出"),
    tagInfoExport(TagDto.class, TagVo.class, MarketingApp.user, "标签信息导出"),
    orderInfoExport(OrderInfoDto.class, OrderInfoVo.class, MarketingApp.extensions, "订单详情导出"),
    mallAppExport(ExportRequestDto.class, MallAppVo.class, MarketingApp.mall, "商城详情导出"),
    flowModelExport(ModelDto.class, ModelVo.class, MarketingApp.flow, "营销自动化-模型导出"),
    flowCanvasExport(CanvasDto.class, CanvasVo.class, MarketingApp.flow, "营销自动化-画布"),
    taskInfoExport(TaskDto.class, TaskVo.class, MarketingApp.merchant, "任务管理信息导出"),
    taskUserExport(TaskUserDto.class, TaskUserVo.class, MarketingApp.merchant, "任务记录导出"),
    memberInfoExport(MemberInfoDto.class, MemberInfoVo.class, MarketingApp.merchant, "会员信息导出"),
    memberEquityExport(MemberEquityDto.class, MemberEquityVo.class, MarketingApp.merchant, "会员等级权益导出"),
    memberTaskExport(MemberTaskDto.class, MemberTaskVo.class, MarketingApp.merchant, "会员等级任务导出"),
    memberUserExport(MemberUserDto.class, MemberUserVo.class, MarketingApp.user, "等级会员导出"),
    memberProductExport(MemberProductDto.class, MemberProductVo.class, MarketingApp.merchant, "会员权益导出"),
    goodsExport(GoodsDto.class, GoodsVo.class, MarketingApp.mall, "商品列表导出"),
    insExport(InsDto.class, InsVo.class, MarketingApp.merchant, "机构导出"),
    roleExport(RoleDto.class, RoleVo.class, MarketingApp.permission, "职务导出"),
    adminUserExport(AdminUserDto.class, AdminUserVo.class, MarketingApp.permission, "员工信息导出"),
    operationLogExport(OperationLogDto.class, OperationLogVo.class, MarketingApp.merchant, "操作日志导出"),
    externalMerchantConfigExport(ExternalMerchantConfigDto.class, ExternalMerchantConfigVo.class, MarketingApp.reach, "平台配置导出"),
    systemMerchantIpLimitExport(SystemMerchantIpLimitDto.class, SystemMerchantIpLimitVo.class, MarketingApp.reach, "ip限制导出"),
    noticeExport(NoticeDto.class, NoticeVo.class, MarketingApp.merchant, "公告导出"),
    applyInfoExport(ApplyInfoDto.class, ApplyInfoVo.class, MarketingApp.merchant, "审核导出"),
    currencyInfoExport(CurrencyInfoDto.class, CurrencyInfoVo.class, MarketingApp.extensions, "代币信息导出"),
    abnormlOrderExport(OrderInfoDto.class, OrderInfoVo.class, MarketingApp.extensions, "异常订单导出"),
    afterSalesOrderExport(AfterSalesOrderDto.class, AfterSalesOrderInfoVo.class, MarketingApp.extensions, "售后订单导出"),
    merchantCategoryExport(MerchantCategoryDto.class, MerchantCategoryVo.class, MarketingApp.merchant, "商品分类导出"),
    userCurrencyNumExport(UserCurrencyNumDto.class, UserCurrencyNumVo.class, MarketingApp.extensions, "用户剩余积分导出"),
    couponUserDetailExport(CouponUserDetailExportDto.class, CouponUserDetailExportVo.class, MarketingApp.merchant, "用户优惠券领取明细导出"),
    couponInfoExport(CouponInfoExportDto.class, CouponInfoExportVo.class, MarketingApp.merchant, "优惠券明细导出"),

    // merchantAccountUserRecordExport(MerchantAccountUserRecordDto.class, MerchantAccountUserRecordExportVo.class, MarketingApp.backstage, "商户余额明细导出"),
    ;

    public String getVal() {
        return val;
    }

    /**
     * 入参dto
     */
    private Class<? extends ExportRequestDto> dtoClass;

    /**
     * 导出vo
     */
    private Class<? extends QueryDataVo> voClass;

    private String val;

    private MarketingApp type;

    public MarketingApp getApp() {
        return type;
    }

    ExportAppEnum(Class<? extends ExportRequestDto> dtoClass, Class<? extends QueryDataVo> voClass, MarketingApp type, String val) {
        this.dtoClass = dtoClass;
        this.voClass = voClass;
        this.type = type;
        this.val = val;
    }

    public Class<? extends ExportRequestDto> getDtoClass() {
        return dtoClass;
    }

    public Class<? extends QueryDataVo> getVoClass() {
        return voClass;
    }


}
